#ifndef __ZOMBIE_H__
#define __ZOMBIE_H__

#include <Ogre.h>
#include "MyMotionState.h"
#include "BulletVehicle.h"
#include "Character.h"
#include "Human.h"

#define ZOMBIEMESH "Jefazo.mesh" // Mesh del zombie
#define ZOMBIE1 "Zombie1"
#define ZOMBIE2 "Zombie2"
#define ZOMBIE3 "Zombie3"
#define ZOMBIE4 "Jefazo"

#define MINDISTANCETOHUMAN 10 // Distancia para perseguir al humano

#define QUERY_MASK_ZOMBIE 1 << 1
#define LIGHT_MASK_ZOMBIE 1 << 1

class ZombieManager;
class ZombieSwarm;

class Zombie : public Character {

 private:

  // Otros atributos ---------------------------------------------------

  ZombieManager* _pZombieManager; // Puntero al gestor de zombis
  Human* _pHuman; // Personaje jugador
  ZombieSwarm* _pSwarm; // Horda a la que pertenece este zombie

  static Ogre::NameGenerator _bloodNameGenerator;

 public:

  Zombie(btDiscreteDynamicsWorld* pWorld,
         btCylinderShape* pZombieCollisionShape,
         Ogre::SceneManager* pSceneManager,
         OpenSteer::Vec3 position,
         Human* pHuman,
         ZombieSwarm* pSwarm = NULL,
         bool boss = false);

  void update(const float currentTime, const float elapsedTime);
  OpenSteer::Vec3 steerForZombie(const float elapsedTime);

  bool doDamage(int damage);
  void doDead();
};

#endif
